package main

import "fmt"

// 定义 Speaker 接口
type Speaker interface {
	Speak() string
}

// 定义 Cat 结构体
type Cat struct {
	HP int
}

// 为 Cat 结构体实现 Speak 方法
func (c Cat) Speak() string {
	return "Meow"
}

// 定义 Dog 结构体
type Dog struct {
	Name string
	HP   int
}

// 为 Dog 结构体实现 Speak 方法
func (d Dog) Speak() string {
	return d.Name + " says: Woof"
}

// 定义一个函数，接受任何实现了 Speaker 接口的类型
func MakeAnimalSpeak(s Speaker) {
	fmt.Println(s.Speak())
}

func main() {
	// 创建一个 Cat 实例
	cat := Cat{}
	// 调用 MakeAnimalSpeak 函数，传入 Cat 实例
	MakeAnimalSpeak(cat)

	// 创建一个 Dog 实例
	dog := Dog{Name: "Buddy", HP: 100}
	// 调用 MakeAnimalSpeak 函数，传入 Dog 实例
	MakeAnimalSpeak(dog)
}